package com.ruoyi.commodity.mapper;

import java.util.List;

import com.ruoyi.common.core.domain.ProductCates;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 分类管理Mapper接口
 * 
 * @author ruoyi
 * @date 2023-09-06
 */
@Mapper
public interface productCatesMapper 
{
    /**
     * 查询分类管理
     * 
     * @param id 分类管理主键
     * @return 分类管理
     */
    public ProductCates selectproductCatesById(Long id);

    /**
     * 查询分类管理列表
     * 
     * @param productCates 分类管理
     * @return 分类管理集合
     */
    public List<ProductCates> selectproductCatesList(ProductCates productCates);

    /**
     * 根据ID查询所以子部门
     * @param id
     * @return
     */
    public List<ProductCates> selectChildrenById(Long id);

    /**
     * 根据ID查询所有子产品（正常状态）
     * @param id
     * @return
     */
    public int selectNormalChildrenById(Long id);

    /**
     * 是否存在子节点
     * @param id
     * @return
     */
    public int selectById(Long id);

    /**
     * 验证产品是否唯一
     * @param name 产品名称
     * @param parentId 产品父级id
     * @return 结果
     */
    public ProductCates selectSole(@Param("name") String name, @Param("parentId") Long parentId);

    /**
     * 新增分类管理
     * 
     * @param productCates 分类管理
     * @return 结果
     */
    public int insertproductCates(ProductCates productCates);

    /**
     * 修改分类管理
     * 
     * @param productCates 分类管理
     * @return 结果
     */
    public int updateproductCates(ProductCates productCates);

    /**
     * 修改所在部门正常状态
     * @param deptIds
     */
    public void updateCatesStatusNormal(Long[] deptIds);

    /**
     * 修改子元素关系
     * @param productCatesList
     * @return
     */
    public int updateCatesChildren(@Param("productCatesList") List<ProductCates> productCatesList);

    /**
     * 删除分类管理
     * 
     * @param id 分类管理主键
     * @return 结果
     */
    public int deleteproductCatesById(Long id);

    /**
     * 批量删除分类管理
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteproductCatesByIds(Long[] ids);

    /**
     * 验证产品是是否存在
     * @param name 产品名称
     * @return 结果
     */
    public ProductCates checkProductCatesNameExists(@Param("name") String name);
}
